package com.wooboo.dsp.redis.util;

import java.util.List;
import java.util.Set;

import com.wooboo.server.ext.Logger;

import redis.clients.jedis.Jedis;

public abstract class AbstractRedis {

	
	 private static Logger logger = Logger.getLogger(AbstractRedis.class);

	 public abstract Jedis getJedis();
	 public abstract void returnJedis(Jedis jedis);
	 
	 /**
	  * 判断key是否存在
	  * */
	 public boolean exists(String key){
		 Jedis jedis=getJedis();
		 boolean b = jedis.exists(key);
		 returnJedis(jedis);
		 return b;
	 }
	 /**
	  * 设置key-value
	  * */
	 public void set(String key,String value){
		 logger.logInfo("set(key="+key+",value="+value);
		 Jedis jedis=getJedis();
		 jedis.set(key, value);
		 jedis.get(key);
		 returnJedis(jedis);
		 logger.logInfo("get(key="+key+",value="+value);
	 }
	 /**
	  * 将 key 的值设为 value，当且仅当 key 不存在。 
    * 若给定的 key 已经存在，则 SETNX 不做任何动作。 
    * SETNX 是SET if Not eXists的简写。
    * set if not exists.
	  * */
	 public void setnx(String key,String value){
		 logger.logInfo("setnx(key="+key+",value="+value);
		 Jedis jedis=getJedis();
		 jedis.setnx(key, value);
		 returnJedis(jedis);
	 }
	 /**
	  * 追加字符串
	  * */
	 public void append(String key,String value){
		 Jedis jedis=getJedis();
		 jedis.append(key, value);
		 returnJedis(jedis);
	 }
	 /**
	  * 获取value
	  * */
	 public String get(String key){
		 Jedis jedis=getJedis();
		 String value=jedis.get(key);
		 returnJedis(jedis);
		 return value;
	 }
	 /**
	  * 删除key
	  * */
	 public Long del(String... key){
		 Jedis jedis=getJedis();
		 Long n = jedis.del(key);
		 returnJedis(jedis);
		 return n;
	 }
	 /**
	  * 一次获取多给key值
	  * */
	 public List<String> mget(String ... keys){
		 Jedis jedis=getJedis();
		 List<String> l = jedis.mget(keys);
		 returnJedis(jedis);
		 return l;
	 }
	 
	 /**
	  * 值保存过期值
	  * */
	 public void expire(String key,Integer seconds){
		 Jedis jedis=getJedis();
		 jedis.expire(key, seconds);
		 returnJedis(jedis);
	 }
	 /**
	  *存储value，并设置seconds时间后过期。
	  * */
	 public void setex(String key,Integer seconds,String value){
		 logger.logInfo("setex(key="+key+",seconds="+seconds+",value="+value);
		 Jedis jedis=getJedis();
		 jedis.setex(key, seconds, value);
		 returnJedis(jedis);
	 }
	 
	 
	 /**
	  * 获取所匹配的key值
	  * */
	 public Set<String> keys(String pattern){
		 Jedis jedis=getJedis();
		 Set<String> set =  jedis.keys(pattern);
		 returnJedis(jedis);
		 return set;
	 }
	 /**
	  * 获取改key的剩余生存时间
	  * */
	 public Long ttl(String key){
		 Jedis jedis=getJedis();
		 Long n= getJedis().ttl(key);
		 returnJedis(jedis);
		 return n;
	 }
	 /**
	  * 清空数据库
	  * */
	 public String flushDB(){
		 Jedis jedis=getJedis();
		 String s= jedis.flushDB();
		 returnJedis(jedis);
		return s;
	 }
	 /**
	  * list api lpush
	  * */
	 public void lpush(String key,String value){
		 Jedis jedis=getJedis();
		 jedis.lpush(key, value);
		 returnJedis(jedis);
	 }
	 
	
	 
	 
	 
	 
	 
	

}
